home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
blankery
/
bserverdir
/
sources
/
clients
/
line.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-11-28
|
4KB
|
192 lines
;/*
sc Line.c DATA=FAR NMINC STRMERGE NOSTKCHK IGNORE=73 STRUCTUREEQUIVALENCE NOSTDIO
slink from LIB:c.o Line.o to //Clients/Line LIB LIB:sc.lib LIB:amiga.lib /lib/client.lib SC SD NOICONS STRIPDEBUG
delete Line.o
quit
Line 1.2 (Client for BServer)
Copyright © 1994 by Stefano Reksten of 3AM - The Three Amigos!!!
All rights reserved.
*/
#include <exec/types.h>
#include <intuition/intuition.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/graphics_protos.h>
#include <clib/alib_protos.h>
#include <stdlib.h>
#include <time.h>
#include "/include/client.h"
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct DisplayIDInformation *dinfo;
#define LINENUM 40
#define LASTLINE 39
struct { WORD FromX, FromY, ToX, ToY; } Line[LINENUM];
WORD IncX, IncY, IncTX, IncTY;
extern ULONG RangeSeed;
void DrawLine( void )
{
UWORD n, swidth, sheight;
struct Rectangle *rect;
register ULONG total_Line = 0;
UBYTE r, g, b;
struct Screen *scr;
rect = GETTXTOSCANRECT(dinfo);
swidth = RECTANGLEWIDTH(rect);
sheight = RECTANGLEHEIGHT(rect);
if ( scr = OpenScreenTags( NULL,
SA_DisplayID, DISPLAYID( dinfo ),
SA_Width, swidth,
SA_Height, sheight,
SA_Left, (RECTANGLEWIDTH(rect) - swidth)/2,
SA_Top, 0,
SA_Depth, 1,
SA_Overscan, OSCAN_TEXT,
SA_Type, CUSTOMSCREEN,
SA_Quiet, TRUE,
TAG_END ) )
{
register struct ViewPort *vp = &(scr->ViewPort);
register struct RastPort *rp = &(scr->RastPort);
SpritesOff();
r = 6; g = 7; b = 9;
SetRGB4( vp, 0, 0, 0, 0 );
SetRGB4( vp, 1, r, g, b );
SetAPen( rp, 1 );
SetDrMd( rp, COMPLEMENT );
Line[0].FromX = RangeRand( swidth );
Line[0].FromY = RangeRand( sheight );
Line[0].ToX = RangeRand( swidth - Line[0].FromX + 4);
Line[0].ToY = RangeRand( sheight - Line[0].FromY + 4);
IncX = RangeRand( 40 ) - 19;
IncY = RangeRand( 40 ) - 19;
IncTX = RangeRand( 40 ) - 19;
IncTY = RangeRand( 40 ) - 19;
while( STILL_BLANKING )
{
WaitTOF();
if ( total_Line++ > LASTLINE )
{
Move( rp, Line[LASTLINE].FromX, Line[LASTLINE].FromY );
Draw( rp, Line[LASTLINE].ToX, Line[LASTLINE].ToY );
}
for ( n = LASTLINE; n; n-- )
{
Line[n].FromX = Line[n-1].FromX;
Line[n].FromY = Line[n-1].FromY;
Line[n].ToX = Line[n-1].ToX;
Line[n].ToY = Line[n-1].ToY;
}
if ( Line[0].FromX + IncX <= 0 )
{
Line[0].FromX = 0;
IncX = RangeRand( 20 ) + 1;
}
else
if ( Line[0].FromX + IncX >= swidth )
{
Line[0].FromX = swidth - 1;
IncX = RangeRand( 20 ) * (-1) - 1;
}
else
Line[0].FromX += IncX;
if ( Line[0].FromY + IncY < 0 )
{
Line[0].FromY = 0;
IncY = RangeRand( 20 ) + 1;
}
else
if ( Line[0].FromY + IncY >= sheight )
{
Line[0].FromY = sheight - 1;
IncY = RangeRand( 20 ) * (-1) - 1;
}
else
Line[0].FromY += IncY;
if ( Line[0].ToX + IncTX <= 0 )
{
Line[0].ToX = 0;
IncTX = RangeRand( 20 ) + 1;
}
else
if ( Line[0].ToX + IncTX >= swidth )
{
Line[0].ToX = swidth - 1;
IncTX = RangeRand( 20 ) * (-1) - 1;
}
else
Line[0].ToX += IncTX;
if ( Line[0].ToY + IncTY < 0 )
{
Line[0].ToY = 0;
IncTY = RangeRand( 20 ) + 1;
}
else
if ( Line[0].ToY + IncTY >= sheight )
{
Line[0].ToY = sheight - 1;
IncTY = RangeRand( 20 ) * (-1) - 1;
}
else
Line[0].ToY += IncTY;
Move( rp, Line[0].FromX, Line[0].FromY );
Draw( rp, Line[0].ToX, Line[0].ToY );
r += RangeRand( 3 ) - 1; if ( r < 0 ) r = 0; if ( r > 15 ) r = 15;
g += RangeRand( 3 ) - 1; if ( g < 0 ) g = 0; if ( g > 15 ) g = 15;
b += RangeRand( 3 ) - 1; if ( b < 0 ) b = 0; if ( b > 15 ) b = 15;
SetRGB4( vp, 1, r, g, b );
}
CloseScreen( scr );
SpritesOn();
}
else
SendClientMsg( ACTION_FAILED );
}
void __main( char *line )
{
if ( IntuitionBase = (struct IntuitionBase *)OpenLibrary( "intuition.library", 37L ) )
{
if ( GfxBase = (struct GfxBase *)OpenLibrary( "graphics.library", 37L ) )
{
if ( dinfo = OpenCommunication() )
{
RangeSeed = time( NULL );
DrawLine();
CloseCommunication( dinfo );
}
CloseLibrary( (struct Library *)GfxBase );
}
CloseLibrary( (struct Library *)IntuitionBase );
}
}